package org.jgs1904.rabbitmq.dead.ttl;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import org.jgs1904.utils.RabbitMqUtils;

/**
 * @author 墨苍璃
 * @date 2023年06月02日15时50分
 * <p>
 * 消息生产者
 */
public class Producer {
    private static final String NORMAL_EXCHANGE = "normal_exchange";

    public static void main(String[] argv) throws Exception {
        try (Channel channel = RabbitMqUtils.getChannel()) {
            //声明一个 exchange
            channel.exchangeDeclare(NORMAL_EXCHANGE, BuiltinExchangeType.DIRECT);
            //设置消息的 TTL 时间 5s
            AMQP.BasicProperties properties = new AMQP.BasicProperties().builder().expiration("50000").build();
            //该信息是用作演示队列个数限制
            for (int i = 1; i < 11; i++) {
                String message = "info" + i;
                /**
                 * basicPublish() 方法是基础的发布消息方法，它有四个参数
                 * String exchange : 交换机名， 当不使用交换机时，传入“”空串。
                 * String routingKey :（路由地址） 发布消息的队列， 无论channel绑定那个队列，最终发布消息的队列都有该字串指定
                 * AMQP.BasicProperties props ：消息的配置属性，例如 MessageProperties.PERSISTENT_TEXT_PLAIN 表示消息持久化。
                 * byte[] body ：消息数据本体， 必须是byte数组
                 */
                channel.basicPublish(NORMAL_EXCHANGE, "zhangsan", properties, message.getBytes());
                System.out.println("生产者发送消息:" + message);
            }
        }
    }
}
